#ifndef _collect_h_INCLUDED
#define _collect_h_INCLUDED

#include "internal.h"

void
kissat_mab_dense_collect(struct kissat*);
void
kissat_mab_sparse_collect(struct kissat*, bool compact, reference start);

static inline void
kissat_mab_defrag_watches_if_needed(kissat* solver)
{
	const size_t size = SIZE_STACK(solver->vectors.stack);
	const size_t size_limit = GET_OPTION(defragsize);
	if (size <= size_limit)
		return;

	const size_t usable = solver->vectors.usable;
	const size_t usable_limit = (size * GET_OPTION(defraglim)) / 100;
	if (usable <= usable_limit)
		return;

	INC(vectors_defrags_needed);
	kissat_mab_defrag_vectors(solver, &solver->vectors, LITS, solver->watches);
}

#endif
